import java.util.*;

public class a2 {
    //map.getOrDefault(key, new ArrayList<String>()) 的作用是：
//当遍历字符串数组 strs 时，对于每个字符串，先将其转换为字符数组并排序得到一个键 key。
//然后尝试从 map 中获取与这个键对应的列表。如果这个键已经存在于 map 中，那么就会返回与该键关联的列表；
//如果这个键不存在，那么就会创建一个新的空的 ArrayList<String> 作为默认值并返回。
//这样确保了无论键是否在 map 中，都能得到一个 List<String> 对象来进行后续操作（向其中添加当前遍历到的字符串
    public static List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String key = Arrays.toString(charArray);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }

    public static void main(String[] args) {
        String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> lists = groupAnagrams(strs);
        System.out.println(lists);
    }
}
